﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SchemaGraph.Interfaces.Edges;
using SchemaGraph.Interfaces.Vertexes;

namespace SchemaGraph.Interfaces
{
    public interface IEdgeCollection : GraphBase.Interfaces.IEdgeCollection
    {
        /// <summary>
        /// Add a restriction.
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="child"></param>
        /// <returns></returns>
        IRestrictionEdge Restrict(IDatatypeVertex parent, IDatatypeVertex child);

        /// <summary>
        /// Add an extension edge to the graph.
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="child"></param>
        /// <returns></returns>
        IExtensionEdge Extend(IDatatypeVertex parent, IDatatypeVertex child);

        /// <summary>
        /// Add a list derivation edge.
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="child"></param>
        /// <returns></returns>
        IListDerivationEdge DeriveList(ISimpleTypeVertex parent, ISimpleTypeVertex child);
    }
}
